#ifndef _INFO_APPER_H_
#define _INFO_APPER_H_


// #define __INFO_APPER_DEBUG__

#ifdef __INFO_APPER_DEBUG__
#define LOG_INFO_DEBUG(...)  printf(__VA_ARGS__);
#else
#define LOG_INFO_DEBUG(...)
#endif

#define INFO_BMCS 0x00
#define INFO_FILE 0x01
#define INFO_VLAN 0x02
#define INFO_PCIE 0x03

#define ETH_HEAD 0xC8C9

#define ETH_TYPE_BMCFF  0x01   //BMC报文
#define ETH_TYPE_STORE  0x02   //存储信息报文
#define ETH_TYPE_OPTIC  0x03   //状态信息光纤上报报文
#define ETH_TYPE_VLANG  0x04   //状态信息千兆上报报文
#define ETH_TYPE_ORDER  0x05   //录取指令报文
#define ETH_TYPE_FILEL  0x06   //文件列表报文
#define ETH_TYPE_DATET  0x07   //时间同步报文
#define ETH_TYPE_CELUE  0x08   //存储策略报文
#define ETH_TYPE_SHUTD  0x09   //关机操作报文
#define ETH_TYPE_IPCFI  0x0a   //IP配置报文
#define ETH_TYPE_MONIT  0x0b   //模拟测试报文
#define ETH_TYPE_MONIF  0x0c   //模拟测试反馈报文
#define ETH_TYPE_VLANS  0x0d   //网络测试发送报文
#define ETH_TYPE_VLANR  0x0e   //网络测试接收报文


/*****************************文件的上报的数据**********************************/
#pragma pack(push)
#pragma pack(1)

typedef struct
{
    //2字节，以0xC8C9开始
    unsigned short header;
    //1字节，0x01：BMC报文 0x03：光纤状态信息上报 0x04：网络状态信息上报
    unsigned char type;
} MessageHeader;

typedef struct
{
    //2字节，报文长度
    unsigned short messageLength;
} MessageTail;

typedef struct {
    float ioTemperate;               //接口板温度，4字节，精确1位小数，单位：°C
    float ioVoltage;                 //接口板电压，4字节，精确1位小数，单位：V
    float ioElectric;                //接口板电流，4字节，精确1位小数，单位：mA
    unsigned char ddrStatus;         //DDR状态，1个字节，0x01：OK  0x02：待机  0x03：断开  其它值：无效
    unsigned char networkStatus;     //网络接口状态，1个字节，0x01：连接  0x02：待机  0x03：断开  其它值：无效
    unsigned char fiberStatus;       //光纤状态，1个字节，0x01：OK  0x02：待机  0x03：断开  其它值：无效
    unsigned char pcieStatus;        //PCIE接口状态，1个字节，0x01：连接  0x02：待机  0x03：断开  其它值：无效
    float controlPanel1_12V;         //主控板1电压，4字节，精确1位小数，单位：V
    float controlPanel1_3_3V;        //主控板1温度，4字节，精确1位小数，单位：°C
    float controlPanel1_CPUTemp;     //主控板1CPU温度，4字节，精确1位小数，单位：°C
    float controlPanel2_12V;         //主控板2电压，4字节，精确1位小数，单位：V
    float controlPanel2_3_3V;        //主控板2温度，4字节，精确1位小数，单位：°C
    float controlPanel2_CPUTemp;     //主控板2CPU温度，4字节，精确1位小数，单位：°C
    float powerStrip_12V;            //电源板12电压
    float powerStrip_12I;            //电源板12电流
    float powerStrip_3_3V;           //电源板3.3v电压
    float powerStrip_3_3I;           //电源板3.3v电流
    float powerStrip_3_3Temp;        //电源板温度
    uint8 cpu1_nvmeTemp[5];
    uint8 cpu2_nvmeTemp[5];
} MessageBodyBMCInfo;

//BMC报文
typedef struct
{
    MessageHeader heade;
    MessageBodyBMCInfo body;
    MessageTail tail;
} MessageBMCInfo;

/*****************************文件的上报的数据**********************************/
typedef struct
{
    unsigned short head; //协议头
    unsigned char type;  //协议类型
    char fname[50];      //文件名
    float file_size;     //精度 0.1
    uint8 file_type;     //文件类型
    uint16 year;         //年
    uint8 month;         //月
    uint8 date;          //天
    uint8 hour;          //时
    uint8 min;           //分
    uint8 sec;           //秒
    uint32 task_num;     //任务代号
    char fpwd[100];       //存储路径
    uint16 tail;         //尾部验证
} FileInfo;

/*****************************网络状态上报**********************************/
typedef struct 
{
    float speed;
    uint8 status;
} VlanStatus;

typedef struct
{
    uint16 head;
    uint8 type;
    VlanStatus vsd[VALN_NUM];
    uint16 tail; //尾部验证
} VlanInfoEth;

#pragma pack(pop)
void sendToBmcManger(uint8 *data);
void sendToMsg(void *msg, uint8 type);
void sendToBMC300ms();
#endif